/******************************************************************************

		gshuwin.cpp \214\122\216\226 \217\157\220\167\201\105\225\322\220\254\203\105\203\102\203\223\203\150\203\105

										1998.4.14	KEN.KURATANI

******************************************************************************/

#include "stdafx.h"
#include "maincmd.h"
#include "gshuwin.h"
#include "scmdwin.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char BASED_CODE THIS_FILE[] = __FILE__;
#endif

const	INT	GSEL_BUSHOU	= 0;
const	INT	GSEL_SANBOU	= 1;
const	INT	HEIKA_NO_CHANGE = 0;
const	INT	HEIKA_CHANGE = 1;

//		\225\220\217\253\226\274\201\101\220\147\225\252\201\101\217\135\216\226\203\122\203\175\203\223\203\150\201\101\213\103\227\315\201\101\222\211\220\275\201\101\223\235\227\246\201\101\225\220\227\315\201\101\222\155\227\315\201\101\220\255\216\241\201\101\226\243\227\315\201\101
//		\216\167\212\366\211\302\224\134\215\305\221\345\225\272\216\155\220\224\201\101\217\253\214\122\210\312\201\101\214\122\226\261\214\157\214\261
static	B_PARAM		_shutsujin_b_param[] ={
#ifdef _PC
/*
	BP_NAME,			// 001
	BP_MIBUN,			// 005
	BP_JUUJI,			// 019
	BP_YUME,			// 019
	BP_KIRYOKU,			// 023
	BP_CHUUSEI,			// 012
	BP_TOUSOTSU,		// 009
	BP_BURYOKU,			// 010
	BP_CHIRYOKU,		// 011
*///	BP_HEISHIMAX,		/* \215\305\221\345\225\272\216\155\220\224 */
/*	BP_SHOUGUN,			// 022
	BP_SENTOUEXP,		// 018
*/
#else	// _PC					\202\157\202\162\227\160\217\103\220\263 1998/05/25 K.Takata
#ifdef _OLD_1998_07_21			// \202\261\202\314\211\272\202\315\214\303\202\242
	BP_NAME,			// \226\274\221\117
	BP_MIBUN,			// \220\147\225\252
	BP_JUUJI,			// \217\135\216\226
	BP_YUME,			// \226\262
	BP_TOUSOTSU,		// \223\235\227\246
	BP_BURYOKU,			// \225\220\227\315

	BP_CHIRYOKU,		// \222\155\227\315
	BP_HEISHIMAX,		// \215\305\221\345\225\272\216\155\220\224
	BP_SHOUGUN,			// \217\253\214\122\210\312
	BP_SENTOUEXP,		// \214\122\226\261\214\157\214\261
#else // _OLD_1998_07_21			// \202\261\202\314\211\272\202\252\220\126\202\265\202\242 1998/07/21 K.Takata
	BP_NAME,			// \226\274\221\117
	BP_JUUJI,			// \217\135\216\226
	BP_YUME,			// \226\262
	BP_KIRYOKU,			// \213\103\227\315
	BP_TOUSOTSU,		// \223\235\227\246
	BP_BURYOKU,			// \225\220\227\315

	BP_CHIRYOKU,		// \222\155\227\315
	BP_HEISHIMAX,		// \215\305\221\345\225\272\216\155\220\224
	BP_SHOUGUN,			// \217\253\214\122\210\312
	BP_SENTOUEXP,		// \214\122\226\261\214\157\214\261
#endif // _OLD_1998_07_21
#endif	// _PC
	BP_NONE,			// 081
};

#ifndef _OLD_1998_07_21		// \216\121\214\122\227\160\203\212\203\130\203\147\202\314\223\340\227\145\222\307\211\301 1998/07/21 K.Takata
static	B_PARAM		_sangun_b_param[] ={
	BP_NAME,			// \226\274\221\117
	BP_JUUJI,			// \217\135\216\226
	BP_YUME,			// \226\262
	BP_KIRYOKU,			// \213\103\227\315
	BP_TOUSOTSU,		// \223\235\227\246
	BP_CHIRYOKU,		// \222\155\227\315

	BP_HEISHIMAX,		// \215\305\221\345\225\272\216\155\220\224
	BP_SHOUGUN,			// \217\253\214\122\210\312
	BP_SENTOUEXP,		// \214\122\226\261\214\157\214\261
	BP_NONE,			// 081
};
#endif	// _OLD_1998_07_21


IMPLEMENT_DYNAMIC(GunjiShutsujinWindow, UserCommandWindow);

GunjiShutsujinWindow::GunjiShutsujinWindow(void)
{
#if	defined(_NOEMBEDED_CLASSARRAY)	//\203\122\201\133\203\150\203\105\203\110\203\212\203\101\202\314\203\157\203\117\211\361\224\360
	m_TextBtn = &m_TextBtn0;
	m_TextCtrl = &m_TextCtrl0;
#endif
	m_pkk = pkkNull;
	m_pktSrc = pktNull;
	m_pktDst = pktNull;
	m_pkb = pkbNull;
	m_bYasen = FALSE;
	m_iKome = 0;
	m_pParentWnd = NULL;
	m_pkbTaishou = pkbNull;
	m_pkbSanbou = pkbNull;
	m_Heika = HEIKA_HOHEI;
	ASSERT(sizeof(*this) < 0x8000);
}

GunjiShutsujinWindow::~GunjiShutsujinWindow()
{
}

#undef	CURRENTCLASS
#define	CURRENTCLASS	GunjiShutsujinWindow

const	INT	SHUTSUJIN_WIN_WX	= 144 + 8;
const	INT	SHUTSUJIN_WIN_WY	= 200 + 8;
const	INT	SHUTSUJIN_WIN_SX	= 12 - 4;
const	INT	SHUTSUJIN_WIN_SY	= 12 - 4;
const	INT	SHUTSUJIN_WIN_DX	= SHUTSUJIN_WIN_SX + SHUTSUJIN_WIN_WX;
const	INT	SHUTSUJIN_WIN_DY	= SHUTSUJIN_WIN_SY + SHUTSUJIN_WIN_WY;


BEGIN_MESSAGE_MAP(GunjiShutsujinWindow, UserCommandWindow)
	//{{AFX_MSG_MAP(GunjiShutsujinWindow)
	ON_COMMAND(ID_SHUTSUJIN_TOSHI, OnSelectToshi)
	ON_COMMAND(ID_SHUTSUJIN_BUSHOU, OnSelectBushou)
	ON_COMMAND(ID_SHUTSUJIN_SANGUN, OnSelectSangun)
	ON_COMMAND(ID_SHUTSUJIN_KOME, OnKome)
	ON_COMMAND(ID_SHUTSUJIN_OK, OnOk)
	ON_COMMAND(ID_SHUTSUJIN_CANCEL, OnCancel)

	ON_WM_DESTROY()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// GunjiShutsujinWindow message handlers

CtrlLayout		GunjiShutsujinWindow::ctrlLayout[SHUTSUJIN_LAYOUT_MAX];
DialogLayout	GunjiShutsujinWindow::Layout = {
	WINID_SHUTSUJINWIN, "GunjiShutsujinWindow", {SHUTSUJIN_WIN_SX, SHUTSUJIN_WIN_SY, SHUTSUJIN_WIN_DX, SHUTSUJIN_WIN_DY},
	WS_POPUP|WS_BORDER, MAINTRANSMODE, DEFAULT_BACK, SHUTSUJIN_LAYOUT_MAX, ctrlLayout
};

POINT	GunjiShutsujinWindow::m_poBtn[SHUTSUJIN_BTN_MAX] = {
	{4 + 4, 36 + 4},
	{4 + 4, 60 + 4},
	{4 + 4, 116 + 4},
	{4 + 4, 140 + 4},
	{20 + 4, 172 + 4},
	{84 + 4, 172 + 4},
};

char*	GunjiShutsujinWindow::m_strBtn[SHUTSUJIN_BTN_MAX] = {
	"\223\163\216\163", "\214\122\222\143", "\216\121\214\122", "\225\272\227\306", "\214\210\222\350", "\222\206\216\176"
};

char*	GunjiShutsujinWindow::m_strTitle[GTYPE_MAX + 1] = {
	"\217\157\220\167", "\221\235\211\207", "\213\244\223\257", "\214\175\214\202", "\213\176\211\207", "\213\176\211\207", "\216\347\217\351"
};

char*	GunjiShutsujinWindow::strTitleName(VOID)
{
	switch ( m_GundanType ) {
	case GTYPE_OFF_MAIN:				/* \220\263\213\113\214\122 */
	case GTYPE_OFF_SUB:					/* \221\235\211\207\214\122 */
	case GTYPE_OFF_UNION:				/* \213\244\223\257\214\122 */
	case GTYPE_DEF_SUB:					/* \213\176\211\207\214\122 */
	case GTYPE_DEF_UNION:				/* \223\257\226\277\214\122 */
		return m_strTitle[m_GundanType];
	case GTYPE_DEF_MAIN:				/* \214\175\214\202\214\122 */
		if ( m_bYasen ) {
			return m_strTitle[GTYPE_DEF_MAIN];
		}
		else {
			return m_strTitle[GTYPE_MAX];	/* \216\347\217\351 */
		}
	default:
		ASSERT(FALSE);
		break;
	};
	return m_strTitle[GTYPE_OFF_MAIN];
}

/* \203\214\203\103\203\101\203\105\203\147 */
VOID	GunjiShutsujinWindow::InitialCtrlLayout(VOID)
{
	// \203\164\203\214\201\133\203\200\203\157\203\142\203\164\203\100\223\157\230\136
	static FBLAYOUT_LIST TextLayout = {
		GNO_TMP_TEXTGROUP,
		{ GNO_TMP_TEXT_SX, GNO_TMP_TEXT_SY, GNO_TMP_TEXT_SX + ( ( 64 / 4 ) * GNO_TMP_TEXT_XDIM ), GNO_TMP_TEXT_SY + ( GNO_TMP_TEXT_YDIM * 16 ) },
		TIMFLAG_CLUT | TIMFLAG_4BITS, CLUT_X__STRING, CLUT_Y__STRING, GNO_TMP_TEXT_XDIM, GNO_TMP_TEXT_YDIM, NULL
	};
	CSan6FrameBuffer::GetSan6FB()->AppendLayoutList(&TextLayout);
	INT	i;
/* \203\173\203\136\203\223 */
	INT	num = 0;
	INT	IDnum = ID_SHUTSUJIN_BTN_START;
	INT	IMnum = 0;
	for ( i = 0 ; i < SHUTSUJIN_BTN_MAX ; i++ ) {
#if	defined( _PC )
		CPoint	po = m_poBtn[i];
#else	// defined( _PC )
		POINT	po = m_poBtn[i];
#endif	// defined( _PC )
		MakeSysButtonState1(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), m_strBtn[i], po.x, po.y);
		IMnum++;
	}
/* \202\163\202\144\202\167\202\163 */
	IDnum = ID_SHUTSUJIN_TEXT_START;
	/* \217\157\220\167 */
	MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), strTitleName(), 4 + 4, 4 + 4);
	IMnum++;
	/* \217\157\220\167\214\263\223\163\216\163 */
	MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), (char*)m_pktSrc->strName(), 52 + 4, 8 + 4);
	IMnum++;
	/* \225\113\227\166\213\103\227\315 */
	if ( ACTIVE(m_pktDst) && (GTYPE_DEF_MAIN == m_GundanType) ) {
		MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), "\213\103\227\3150", 92 + 4, 8 + 4);
	}
	else {
		MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), "\213\103\227\31540", 92 + 4, 8 + 4);
	}
	IMnum++;
	/* \217\157\220\167\220\346\223\163\216\163 */
	if ( ACTIVE(m_pktDst) ) {
		MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), (char*)m_pktDst->strName(), 44 + 4, 40 + 4);
	}
	else {
		MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), (char*)strNameNull2, 44 + 4, 40 + 4);
	}
	IMnum++;
	/* \221\215\221\345\217\253 */
	BPtr	pkbTaishou = m_pkbTaishou;
	if ( ACTIVE(pkbTaishou) ) {
		MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), (char*)pkbTaishou->strName(), 60 + 4, 64 + 4);
	}
	else {
		MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), (char*)strNameNull4, 60 + 4, 64 + 4);
	}
	IMnum++;
	BPtr	pkb;
	INT	total = 0;
	INT	cnt = m_BListRet.GetCount();
	ASSERT(cnt <= GBUSHOU_MAX);
	cnt = min(cnt, GBUSHOU_MAX);
	for ( i = 0 ; i < cnt ; i++ ) {
		pkb = m_BListRet.pkbGetBPtr(i);
		if ( ACTIVE(pkb) ) {
			INT	hei = pkb->GetHeishi();
			total = limadd(total, hei, 1000);
		}
		else {
			ASSERT(FALSE);
		}
	}
	/* \225\224\221\340\220\224 */
	MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), "\225\224\221\340\220\224:", 44 + 4, 80 + 4);
	IMnum++;
	sprintf(m_strButaiKazu, "%d", cnt);
	MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), m_strButaiKazu, 100 + 4, 80 + 4);
	IMnum++;
	/* \225\272\216\155\220\224 */
	MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), "\221\215\225\272\220\224:", 44 + 4, 96 + 4);
	IMnum++;
	sprintf(m_strHeishiKazu, "%d", total);
	MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), m_strHeishiKazu, 100 + 4, 96 + 4);
	IMnum++;

	/* \216\121\214\122 */
	if ( ACTIVE(m_pkbSanbou) ) {
		MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), (char*)m_pkbSanbou->strName(), 44 + 4, 120 + 4);
	}
	else {
		MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), (char*)strNameNull4, 44 + 4, 120 + 4);
	}
	IMnum++;
	/* \225\272\227\306 */
	if ( (m_GundanType == GTYPE_OFF_MAIN) ||
				 ((m_GundanType == GTYPE_OFF_SUB) && m_pktSrc->isHokyuu()) ) {
		sprintf(m_strKomeKazu, "%d", m_iKome);
	}
	else {
		sprintf(m_strKomeKazu, (char*)strDigitNull5);
	}
	MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), m_strKomeKazu, 44 + 4, 144 + 4);
	IMnum++;
	ASSERT(SHUTSUJIN_LAYOUT_MAX == num);
	ASSERT(SHUTSUJIN_LAYOUT_MAX == IMnum);
}

BOOL GunjiShutsujinWindow::Create(VOID)
{
	CGameDoc* pDoc = ::GetSan6App().GetDocument();
	ASSERT(pDoc != NULL);
	InitialCtrlLayout();
	if ( !CDialog::Create(&Layout, m_pParentWnd, pDoc) ) {
		return FALSE;
	}
	return TRUE;
}

BOOL	GunjiShutsujinWindow::OnInitDialog(CVisualObjectList* pVOL)
{
	if ( !CDialog::OnInitDialog(pVOL) ) {
		return FALSE;
	}
	m_TextCtrl[2].SetPlate(TEXT_PLATE32, FALSE);
/* \221\345\217\253\203\175\201\133\203\112\201\133 */
	m_MarkerDib.Create(GNO_MAINMARKER5(MMARK_TAISHOU));
	CPoint	pntTmp = CPoint(44 + 4, 64 + 4);
	InsertVisualObject(pVOL, &m_MarkerDib, pntTmp, ZORDER_LOW6);
//	INT	i;
//	for ( i = 0 ; i < SHUTSUJIN_BTN_MAX ; i++ ) {
//		m_TextBtn[i].SetSize(40, 24);
//	}
	UserCommandWindow::SetTextImage(&m_TextCtrl[0], strTitleName());	/* \203\173\203\136\203\223\202\314\203\166\203\214\201\133\203\147 */
	if ( UINT_MAX == m_unCtrlID ) {
		if ( IsEnableCtrl(ID_SHUTSUJIN_TOSHI) ) {
			SelectCommand(ID_SHUTSUJIN_TOSHI);
			m_unCtrlID = ID_SHUTSUJIN_TOSHI;
		}
		else {
			SelectCommand(ID_SHUTSUJIN_BUSHOU);
			m_unCtrlID = ID_SHUTSUJIN_BUSHOU;
		}
	}
	ReviseFocus();						/* \203\164\203\110\201\133\203\112\203\130\217\103\220\263 */
	EnableOkButton();					/* \202\156\202\152\203\173\203\136\203\223 */
	EnableSangunButton();				/* \216\121\214\122\203\173\203\136\203\223 */
	EnableToshiButton();				/* \223\163\216\163\203\173\203\136\203\223 */
	EnableKomeButton();					/* \225\272\227\306\203\173\203\136\203\223 */
	return FALSE;
}

/* \202\156\202\152\203\173\203\136\203\223 */
VOID	GunjiShutsujinWindow::EnableOkButton(VOID)
{
	HoldDraw();
	if ( ChkOkButton() ) {
		EnableCtrl(ID_SHUTSUJIN_OK, TRUE);
	}
	else {
		EnableCtrl(ID_SHUTSUJIN_OK, FALSE);
	}
	ReleaseDraw();
}

/* \216\121\214\122\203\173\203\136\203\223 */
VOID	GunjiShutsujinWindow::EnableSangunButton(VOID)
{
	HoldDraw();
	if ( 1 >= m_BList.GetCount() ) {			/* \221\123\225\224\202\305\210\352\220\154 */
		EnableCtrl(ID_SHUTSUJIN_SANGUN, FALSE);
	}
	else {
		BList	blist;
		if ( 0 < PickShutsujinBushou(&blist, GSEL_SANBOU) ) {
			EnableCtrl(ID_SHUTSUJIN_SANGUN, TRUE);
		}
		else {
			EnableCtrl(ID_SHUTSUJIN_SANGUN, FALSE);
		}
	}
	ReleaseDraw();
}

/* \223\163\216\163\203\173\203\136\203\223 */
VOID	GunjiShutsujinWindow::EnableToshiButton(VOID)
{
	HoldDraw();
	if ( GTYPE_OFF_MAIN == m_GundanType ) {	/* \220\263\213\113\214\122\202\314\216\236\202\276\202\257\211\237\202\271\202\351 */
		EnableCtrl(ID_SHUTSUJIN_TOSHI, TRUE);
	}
	else {
		EnableCtrl(ID_SHUTSUJIN_TOSHI, FALSE);
	}
	ReleaseDraw();
}

/* \225\272\227\306\203\173\203\136\203\223 */
VOID	GunjiShutsujinWindow::EnableKomeButton(VOID)
{
	HoldDraw();
	if ( (GTYPE_OFF_MAIN == m_GundanType) ||
				 ((GTYPE_OFF_SUB == m_GundanType) && m_pktSrc->isHokyuu()) ) {
		EnableCtrl(ID_SHUTSUJIN_KOME, TRUE);
	}
	else {
		EnableCtrl(ID_SHUTSUJIN_KOME, FALSE);
	}
	ReleaseDraw();
}

VOID	GunjiShutsujinWindow::SetHeika(VOID)
{
	INT		i, hei, cnt;
	HEIKA	heika = HEIKA_NONE;

	cnt = 0;
	for ( i = 0 ; i < HEIKA_MAX ; i++ ) {
		hei = m_pktSrc->iHeishi((HEIKA)i);
		if ( 0 == hei ) {					/* \225\272\202\252\202\117\202\310\202\314\202\305\203\132\203\142\203\147\202\305\202\253\202\310\202\242 */
			continue;
		}
		heika = (HEIKA)i;
		break;
	}
	if ( HEIKA_NONE == heika ) {						/* \203\107\203\211\201\133\217\210\227\235 */
		ASSERT(FALSE);
		heika = HEIKA_HOHEI;
	}
	m_Heika = heika;
}

/* \225\220\217\253\203\146\201\133\203\136\217\211\212\372\211\273 */
VOID	GunjiShutsujinWindow::ClrBushouData(HEIKA heika)
{
	INT	bkazu = m_BList.GetCount();
	for ( INT i = 0 ; i < bkazu ; i++ ) {
		BPtr	pkb = m_BList.pkbGetBPtr(i);
		if ( NOTACTIVE(pkb) ) {
			ASSERT(FALSE);
			continue;
		}
		pkb->SetHeishi(0);
		pkb->SetHeika(heika);
	}
}

static
INT	_sort_func_shutsujin(BPtr pkb)
{
	INT	kazu = pkb->iHeishiMax();
	kazu *= 200;
	if ( pkb->isKunshu() ) {
		return 50000;
	}
	kazu += (pkb->iTousotsu());
	return kazu;
}


/* \203\146\201\133\203\136\217\211\212\372\211\273 \202\120\223\170\202\265\202\251\214\304\202\316\202\310\202\242\202\346\202\244\202\311\222\215\210\323 */
BOOL	GunjiShutsujinWindow::InitData(TPtr pkt, MainCommand* pMainCmd, CWnd* pParentWnd,
															G_TYPE Guntype, TPtr pkt2, BOOL yasen)
{
	CGameDoc* pDoc = ::GetSan6App().GetDocument();
	ASSERT(pDoc != NULL);
	m_pParentWnd = pParentWnd;
	if ( NOTACTIVE(pkt) ) {
		return FALSE;
	}
	m_pMainCommand = pMainCmd;
	m_pktSrc = pkt;
	m_pktDst = pkt2;
	m_pkk = pkt->pkkShozoku();
	if ( NOTACTIVE(m_pkk) ) {
		return FALSE;
	}
	m_bYasen = yasen;	/* GTYPE_DEF_MAIN\202\315\226\354\220\355\202\314\217\352\215\207\201\165\214\175\214\202\214\122\201\166\215\125\217\351\220\355\202\314\217\352\215\207\201\165\216\347\217\351\214\122\201\166\202\306\214\304\202\316\202\352\202\351 */
	m_GundanType = Guntype;
	if ( 0 >= m_pktSrc->iTotalHeishi() ) {
		return FALSE;
	}
	if ( m_GundanType == GTYPE_OFF_MAIN ) {	/* \215\125\214\202\221\244\220\263\213\113\214\122 */
		if ( 0 == m_pMainCommand->PickShutsujinToshi(m_pkk, m_pktSrc, &m_TListDst) ) {
			return FALSE;
		}
		if ( 0L >= m_pkk->lKome() ) {		/* \225\272\227\306\202\252\202\310\202\242 */
			return FALSE;
		}
	}
	if ( GTYPE_DEF_MAIN > m_GundanType ) {	/* \215\125\214\202\221\244 */
		if ( 0 == m_pMainCommand->PickShutsujinBushouSub(m_pktSrc, &m_BList, m_GundanType) ) {
			return FALSE;
		}
	}
	else {
		if ( m_bYasen ) {
			m_BList.PickBushouGeigeki(m_pktSrc);
		}
		else {
			m_pMainCommand->PickShutsujinBushouSub(m_pktSrc, &m_BList, m_GundanType);
		}
		if ( 0 == m_BList.GetCount() ) {
			return FALSE;
		}
	}
	m_BList.Sort(_sort_func_shutsujin);
	m_Heika = HEIKA_HOHEI;
	SetHeika();
	ClrBushouData(m_Heika);						/* \225\220\217\253\203\146\201\133\203\136\217\211\212\372\211\273 */
	m_pkbSanbou = pkbNull;
	if ( (m_GundanType == GTYPE_OFF_MAIN) ||
				 ((m_GundanType == GTYPE_OFF_SUB) && m_pktSrc->isHokyuu()) ) {

		INT	kome, kome_max, kome_min;
		kome = (INT)m_pkk->lKome();
		kome_max = min(kome, 10000);
		INT	total = m_pktSrc->iTotalHeishi(GUNDAN_OFF);		/* \212\371\202\311\214\122\222\143\202\314\225\272\202\315\215\154\202\246\202\310\202\242 */
		INT	yosou = iYosouTotalHeishi();	/* \202\124\220\154\202\314\215\207\214\166 */
		total = min(total, yosou);
		kome = min(kome, ((total + 9) / 10) * 30);
		kome = min(kome, 3000);
		m_iKome = kome;
		kome_min = 0;
	}
	return TRUE;
}

/* \214\122\222\143\227\134\221\172\221\215\225\272\216\155\220\224 */
INT	GunjiShutsujinWindow::iYosouTotalHeishi(VOID)
{
	BList	blist = m_BList;
	BPtr	pkb;
	INT	i, hei;
	INT	total = 0;
	INT	bkazu = blist.GetCount();
	if ( 0 >= bkazu ) {
		return 0;
	}
	blist.Sort((UINT)BP_HEISHIMAX);
	bkazu = min(bkazu, GBUSHOU_MAX);
	for ( i = 0 ; i < bkazu ; i++ ) {
		pkb = blist.pkbGetBPtr(i);
		hei = pkb->iHeishiMax();
		total = limadd(total, hei, 1000);
	}
	return total;
}

/* \217\343\203\160\203\142\203\150\202\252\211\237\202\263\202\352\202\275 */
void GunjiShutsujinWindow::PushPadUp(void)
{
	UINT	uCtrlID = CDialog::GetSelectedCtrlID();	/* \221\111\221\360\202\263\202\352\202\304\202\242\202\351\203\122\203\223\203\147\203\215\201\133\203\213\202\150\202\143\216\346\223\276 */
	UINT	newCtrlID = uCtrlID;

	switch	( uCtrlID ) {
	case ID_SHUTSUJIN_TOSHI:
		newCtrlID = ID_SHUTSUJIN_OK;
		break;
	case ID_SHUTSUJIN_OK:
	case ID_SHUTSUJIN_CANCEL:
		newCtrlID = ID_SHUTSUJIN_KOME;
		break;
	default:
		CDialog::PushPad(PADKEY_UP);
		return;
	}
	SelectCommand(newCtrlID);
}

/* \211\272\203\160\203\142\203\150\202\252\211\237\202\263\202\352\202\275 */
void GunjiShutsujinWindow::PushPadDown(void)
{
	UINT	uCtrlID = CDialog::GetSelectedCtrlID();	/* \221\111\221\360\202\263\202\352\202\304\202\242\202\351\203\122\203\223\203\147\203\215\201\133\203\213\202\150\202\143\216\346\223\276 */
	UINT	newCtrlID = uCtrlID;

	switch	( uCtrlID ) {
	case ID_SHUTSUJIN_KOME:
		newCtrlID = ID_SHUTSUJIN_OK;
		break;
	case ID_SHUTSUJIN_OK:
	case ID_SHUTSUJIN_CANCEL:
		newCtrlID = ID_SHUTSUJIN_TOSHI;
		break;
	default:
		CDialog::PushPad(PADKEY_DOWN);
		return;
	}
	SelectCommand(newCtrlID);
}

/* \215\266\203\160\203\142\203\150\202\252\211\237\202\263\202\352\202\275 */
void GunjiShutsujinWindow::PushPadLeft(void)
{
	UINT	uCtrlID = CDialog::GetSelectedCtrlID();	/* \221\111\221\360\202\263\202\352\202\304\202\242\202\351\203\122\203\223\203\147\203\215\201\133\203\213\202\150\202\143\216\346\223\276 */
	UINT	newCtrlID = uCtrlID;

	if ( ID_SHUTSUJIN_OK == uCtrlID ) {
		newCtrlID = ID_SHUTSUJIN_CANCEL;
	}
	else if ( ID_SHUTSUJIN_CANCEL == uCtrlID ) {
		newCtrlID = ID_SHUTSUJIN_OK;
	}
	SelectCommand(newCtrlID);
}

/* \211\105\203\160\203\142\203\150\202\252\211\237\202\263\202\352\202\275 */
void GunjiShutsujinWindow::PushPadRight(void)
{
	UINT	uCtrlID = CDialog::GetSelectedCtrlID();	/* \221\111\221\360\202\263\202\352\202\304\202\242\202\351\203\122\203\223\203\147\203\215\201\133\203\213\202\150\202\143\216\346\223\276 */
	UINT	newCtrlID = uCtrlID;

	if ( ID_SHUTSUJIN_OK == uCtrlID ) {
		newCtrlID = ID_SHUTSUJIN_CANCEL;
	}
	else if ( ID_SHUTSUJIN_CANCEL == uCtrlID ) {
		newCtrlID = ID_SHUTSUJIN_OK;
	}
	SelectCommand(newCtrlID);
}

/* \203\160\203\142\203\150\202\252\211\237\202\263\202\352\202\275 */
void GunjiShutsujinWindow::PushPad(int nPadID)
{
	switch ( nPadID ) {
	case PADKEY_UP :
		PushPadUp();
		return;
	case PADKEY_DOWN :
		PushPadDown();
		return;
	case PADKEY_LEFT :
		PushPadLeft();
		return;
	case PADKEY_RIGHT :
		PushPadRight();
		return;
	case PADKEY_START :
		if ( !ChkOkButton() ) {
			return;
		}
		SelectAndPush(ID_SHUTSUJIN_OK);
		return;
	default :
		break;
	}
	CDialog::PushPad(nPadID);
}

/* \203\160\203\142\203\150\202\252\227\243\202\263\202\352\202\275 */
void GunjiShutsujinWindow::ReleasePad(int nPadID)
{
	switch ( nPadID ) {
	case PADKEY_START :
		if ( !ChkOkButton() ) {
			return;
		}
		nPadID = PADKEY_CIRCLE;	// \213\255\210\370\202\311\201\233\203\173\203\136\203\223\202\252\227\243\202\263\202\352\202\275\202\261\202\306\202\311\202\267\202\351
		break;
	case PADKEY_X:
		OnCancel(this);
		return;
	default :
		break;
	}
	CDialog::ReleasePad(nPadID);
}

CDIB* GunjiShutsujinWindow::OnGetDibPtr(UINT unCtrlID)
{
	if ( (ID_SHUTSUJIN_BTN_START <= unCtrlID) && (unCtrlID < (ID_SHUTSUJIN_BTN_START + SHUTSUJIN_BTN_MAX)) ) {
		return &m_TextBtn[unCtrlID - ID_SHUTSUJIN_BTN_START];	/* \203\173\203\136\203\223 */
	}
	else if ( (ID_SHUTSUJIN_TEXT_START <= unCtrlID) && (unCtrlID < (ID_SHUTSUJIN_TEXT_START + SHUTSUJIN_TEXT_MAX)) ) {
		return &m_TextCtrl[unCtrlID - ID_SHUTSUJIN_TEXT_START];/* \202\163\202\144\202\167\202\163 */
	}
	ASSERT(0);
	return NULL;
}

//		\223\163\216\163\226\274\201\101\217\212\221\256\201\101\221\276\216\347\201\101\225\220\217\253\220\224\201\101\223\163\216\163\202\314\221\215\225\272\216\155\220\224
static	T_PARAM		_shutsujin_t_param[] ={
	TP_NAME,
	TP_SHOZOKU,
	TP_TAISHU,
	TP_BUSHOUSUU,
	TP_TOTALHEISHI,
	TP_NONE
};

/* \223\163\216\163\221\111\221\360 */
VOID	GunjiShutsujinWindow::SelectSemekomiToshi(VOID)
{
	TPtr	pkt;

	if ( pktNull == m_pktSrc ) {
		return;
	}
	pkt = SelectToshiSingle(m_TListDst, _shutsujin_t_param, strNull);
	if ( pkt == pktNull ) {				/* \223\163\216\163\221\111\221\360\202\360\267\254\335\276\331\202\265\202\275 */
		return;
	}
	m_pktDst = pkt;
}

/* \223\163\216\163\221\111\221\360 */
void	GunjiShutsujinWindow::OnSelectToshi(GunjiShutsujinWindow* pThis)
{
	if ( GTYPE_OFF_MAIN != pThis->m_GundanType ) {	/* \220\263\213\113\214\122\202\314\216\236\202\276\202\257\211\237\202\271\202\351 */
		return;
	}
	pThis->m_unCtrlID = ID_SHUTSUJIN_TOSHI;
	pThis->EndModalLoop(ID_SHUTSUJIN_TOSHI);
}

/*****************************************************************************/

/* \221\111\221\360\211\302\224\134\225\220\217\253\202\360\217\127\202\337\202\351 \216\121\226\144\201\106sanbouf = GSEL_SANBOU , \225\220\217\253:sanbouf = GSEL_BUSHOU*/
INT		GunjiShutsujinWindow::PickShutsujinBushou(BList* blist, INT sanbouf)
{
	BPtr	pkb;
	BList	blistSrc;
	INT		bkazu, i, gunkazu;

	blist->RemoveAll();
	blistSrc = m_BList;
	bkazu = blistSrc.GetCount();
	gunkazu = m_BListRet.GetCount();
	for ( i = 0 ; i < bkazu ; i++ ) {
		pkb = blistSrc.pkbGetBPtr(i);
		if ( NOTACTIVE(pkb) ) {
			continue;
		}
		if ( GSEL_SANBOU == sanbouf ) {	/* \216\121\226\144\221\111\221\360\216\236 */
			if ( pkb->isKunshu() ) {
				continue;
			}
			if ( m_BListRet.Find(pkb) != NULL ) {	/* \212\371\202\311\214\122\222\143\203\201\203\223\203\157\201\133 */
				continue;
			}
		}
		else {
			if ( m_pkbSanbou == pkb ) {	/* \216\121\226\144\202\310\202\314\202\305\214\122\222\143\202\315\203\137\203\201 */
				continue;
			}
		}
		if ( ChkUseKiryoku(m_GundanType) ) {
			if ( pkb->iKiryoku() < KIRYOKU_GUNJI_SHUTSUJIN ) {
				continue;
			}
		}
		if ( ChkUseCommandFlag(m_GundanType) ) {
			if ( pkb->isCommandEnd() ) {
				continue;
			}
		}
		if ( !ChkGunyuuShutsujin(m_GundanType) ) {
			if ( pkb->isKunshu() ) {
				continue;
			}
		}

		blist->AddTail(pkb);			/* \203\212\203\130\203\147\202\311\222\307\211\301 */
	}
	return blist->GetCount();
}

/* \221\215\221\345\217\253\221\111\221\360 */
VOID	GunjiShutsujinWindow::SelectTaishou(VOID)
{
	INT	i;
	INT	kazu = m_BListRet.GetCount();
	BPtr	pkb;

	if ( 0 == kazu ) {
		m_pkbTaishou = pkbNull;
		return;
	}
/* \210\352\220\154\202\314\217\352\215\207 */
	if ( 1 == kazu) {
		pkb = m_BListRet.pkbGetBPtr(0);
		ASSERT(ACTIVE(pkb));
		m_pkbTaishou = pkb;
		return;
	}
/* \214\116\216\345\202\252\221\266\215\335\202\267\202\351\217\352\215\207 */
	for ( i = 0 ; i < kazu ; i++ ) {
		pkb = m_BListRet.pkbGetBPtr(i);
		if ( pkb == m_pkbSanbou ) {		/* \216\121\226\144\202\251\202\347\212\117\202\267 */
			m_pkbSanbou = pkbNull;
		}
		if ( pkb->isKunshu() ) {		/* \214\116\216\345 */
			m_pkbTaishou = pkb;
			return;
		}
	}
/* \202\273\202\314\221\274 */
	for ( ; ; ) {
		pkb = SelectBushouSingle(m_BListRet, _shutsujin_b_param, _T("\217\157\220\167\225\220\217\253\202\314\222\206\202\251\202\347\n\214\122\222\143\222\267\202\360\221\111\221\360\202\265\202\304\202\255\202\276\202\263\202\242"), NULL);
		if ( ACTIVE(pkb) ) {			/* \203\114\203\203\203\223\203\132\203\213\225\163\211\302 */
			break;
		}
	}
	m_pkbTaishou = pkb;
}

/* \225\220\217\253\221\111\221\360 */
VOID	GunjiShutsujinWindow::SelectShutsujinBushou(VOID)
{
	GunjiHenseiWindow	CmdWin;
	if ( !CmdWin.InitData(m_pktSrc, m_pMainCommand, NULL, &m_BList, m_GundanType, m_bYasen) ) {
		CmdWin.DestroyWindow();
		return;
	}
	CmdWin.InitData2(&m_BListRet, m_pkbSanbou);	/* \216\121\226\144\202\306\214\273\215\335\202\314\225\220\217\253\202\360\203\132\203\142\203\147 */
//	CmdWin.m_pkbSanbou = m_pkbSanbou;	/* \216\121\226\144 */
//	CmdWin.m_BListRet = m_BListRet;
	INT	RetValue = -1;
	for ( ; ; ) {
		RetValue = -1;
		if ( CmdWin.Create() ) {
			RetValue = CmdWin.RunModalLoop();
			CmdWin.DestroyWindow();
		}
		else {
			CmdWin.DestroyWindow();
			break;
		}
		switch ( RetValue ) {
		case ID_HENSEI_BUSHOU:			/* \225\220\217\253\221\111\221\360 */
			CmdWin.SelectShutsujinBushou();
			break;
		default:
			break;
		}
		if ( (IDOK == RetValue) || (IDCANCEL == RetValue) ) {
			break;
		}
	}
	if ( IDOK == RetValue ) {
		m_BListRet = CmdWin.m_BListRet;
		SelectTaishou();				/* \221\215\221\345\217\253\221\111\221\360 */
	}
}

/* \225\220\217\253\221\111\221\360 */
void	GunjiShutsujinWindow::OnSelectBushou(GunjiShutsujinWindow* pThis)
{
	pThis->m_unCtrlID = ID_SHUTSUJIN_BUSHOU;
	pThis->EndModalLoop(ID_SHUTSUJIN_BUSHOU);
}

static
INT	_sort_func_sangun(BPtr pkb)
{
	INT	kazu = pkb->iChiryoku();
	return kazu;
}

/* \216\121\214\122\221\111\221\360 */
VOID	GunjiShutsujinWindow::SelectShutsujinSangun(VOID)
{
	BList	blist, blistOld;
	BPtr	pkb = pkbNull;

	if ( NOTACTIVE(m_pktSrc) ) {
		return;
	}
	if ( 0 == PickShutsujinBushou(&blist, GSEL_SANBOU) ) {
		return;
	}
	blistOld.RemoveAll();
	if ( ACTIVE(m_pkbSanbou) ) {
		blistOld.AddTail(m_pkbSanbou);
	}
	BList	blistRet;
	blistRet.RemoveAll();
	blist.Sort(_sort_func_sangun);
	INT	kazu = SelectBushou(blist, blistRet, 1, _sangun_b_param, strNull, &blistOld);
	if ( -1 == kazu ) {					/* \203\114\203\203\203\223\203\132\203\213 */
		return;
	}
	pkb = pkbNull;						/* \214\122\216\164\211\360\214\331 */
	if ( kazu ) {
		pkb = blistRet.pkbGetBPtr(0);
	}
	m_pkbSanbou = pkb;
}

void	GunjiShutsujinWindow::OnSelectSangun(GunjiShutsujinWindow* pThis)
{
	BList	blist;
	if ( 0 == pThis->PickShutsujinBushou(&blist, GSEL_SANBOU) ) {
		return;
	}
	pThis->m_unCtrlID = ID_SHUTSUJIN_SANGUN;
	pThis->EndModalLoop(ID_SHUTSUJIN_SANGUN);
}

/* \225\272\227\306\223\374\227\315 */
VOID	GunjiShutsujinWindow::InpKome(VOID)
{
	INT	kome, kome_max, kome_min;
	kome = (INT)m_pkk->lKome();
	kome_max = min(kome, 10000);
	kome_min = 0;
	if ( GTYPE_OFF_MAIN == m_GundanType ) {	/* \220\263\213\113\214\122\210\310\212\117 */
		kome_min = 1;
	}
	INT	ret = InputCalc(kome_min, kome_max, m_iKome, this);
	SetFocus();
	if ( -1 == ret ) {
		return;
	}
	m_iKome = ret;
	HoldDraw();
	/* \225\272\227\306 */
//	UpdateWindow();
	sprintf(m_strKomeKazu, "%d", m_iKome);
	m_TextCtrl[10].SetText(m_strKomeKazu);
	ReleaseDraw();
	EnableOkButton();					/* \202\156\202\152\203\173\203\136\203\223 */
}

void	GunjiShutsujinWindow::OnKome(GunjiShutsujinWindow* pThis)
{
	if ( (pThis->m_GundanType == GTYPE_OFF_MAIN) ||
				 ((pThis->m_GundanType == GTYPE_OFF_SUB) && pThis->m_pktSrc->isHokyuu()) ) {
		pThis->m_unCtrlID = ID_SHUTSUJIN_KOME;
		pThis->InpKome();
	}
}

VOID	GunjiShutsujinWindow::SetGunData(VOID)
{
	GPtr	pkg;
	BPtr	pkb, pkbTaishou, pkbSanbou;
	INT		i, hei, kome;
	HEIKA	heika;

	GAMEMANAGER& GAMEMGR = ::GetSan6App().GetGamemgr();

	if ( (pkg = GAMEMGR.pkgEmpty()) == pkgNull ) {	/* \213\363\202\253\202\252\202\310\202\242 */
		ASSERT(FALSE);
		return;
	}
	InitGDataConfig();					/* \214\122\222\143\203\146\201\133\203\136\217\211\212\372\211\273 */
	pkbTaishou = m_pkbTaishou;
	pkbSanbou = m_pkbSanbou;			/* \216\121\226\144 */
	GDataCfg.pkbTaishou = pkbTaishou;	/* (\211\274)\221\215\221\345\217\253 */
	GDataCfg.pkbSanbou = pkbSanbou;		/* \216\121\226\144 */
	GDataCfg.pktShozai = m_pktSrc;		/* \215\125\202\337\215\236\202\335\214\263 */
	GDataCfg.pktSemekomiToshi = m_pktDst;	/* \215\125\202\337\215\236\202\335\223\163\216\163 */
	ASSERT(0 <= m_iKome);
	ASSERT(10000 >= m_iKome);
	kome = m_iKome;
	TRACE("\221\215\221\345\217\253:(sd)\n", m_pkbTaishou->strName());
	TRACE("\214\122\222\143 (%s) -> (%s)\n", m_pktSrc->strName(), m_pktDst->strName());
	TRACE("\214\122\222\143\225\304 (%d)\n", kome);
	GDataCfg.iType = m_GundanType;		/* \215\125\202\337\215\236\202\335\203\136\203\103\203\166 */
	GDataCfg.iKome = kome;
	GDataCfg.iKin = 0;
	TRACE("\214\122\222\143\224\324\215\206 (%s)(%d)\n", pkbTaishou->strName(), pkg->iNum());
	for ( i = 0 ; i < GBUSHOU_MAX ; i++ ) {
		GDataCfg.pkbBushou[i] = pkbNull;
		GDataCfg.hei[i] = 0;
		GDataCfg.hei[i] = HEIKA_HOHEI;
	}
	INT	bkazu = m_BListRet.GetCount();
	for ( i = 0 ; i < bkazu ; i++ ) {
		pkb = m_BListRet.pkbGetBPtr(i);
		if ( NOTACTIVE(pkb) ) {
			ASSERT(FALSE);
			continue;
		}
		GDataCfg.pkbBushou[i] = pkb;
		hei = pkb->GetHeishi();
		heika = pkb->GetHeika();
		ASSERT(0 < hei);
		ASSERT(HEIKA_HOHEI <= heika);
		ASSERT(HEIKA_MAX > heika);
		GDataCfg.hei[i] = hei;
		GDataCfg.heika[i] = heika;		/* \225\272\211\310 */
		TRACE("\214\122\222\143 (%s)(%s)(%d)\n", pkb->strName(), pkb->strHeika(heika), hei);
	}
}

/* \202\156\202\152\203\173\203\136\203\223\202\252\211\237\202\271\202\351\202\251 */
BOOL	GunjiShutsujinWindow::ChkOkButton(VOID)
{
	if ( pktNull == m_pktDst ) {
		return FALSE;
	}
	BPtr	pkb;
	INT		i;
	HEIKA	heika;

	if ( NOTACTIVE(m_pkbTaishou) ) {
		return FALSE;
	}
	INT	kazu = m_BListRet.GetCount();
	if ( 0 == kazu ) {
		return FALSE;
	}
	for ( i = 0 ; i < kazu ; i++ ) {
		pkb = m_BListRet.pkbGetBPtr(i);
		if ( 0 >= pkb->GetHeishi() ) {	/* \225\272\216\155\203\107\203\211\201\133 */
			ASSERT(FALSE);
			return FALSE;
		}
		heika = pkb->GetHeika();
		if ( (heika < HEIKA_HOHEI) || (HEIKA_MAX <= heika) ) {	/* \225\272\211\310\203\107\203\211\201\133 */
			ASSERT(FALSE);
			return FALSE;
		}
		if ( pkb->isKunshu() ) {
			if ( pkb != m_pkbTaishou ) {/* \214\116\216\345\202\315\220\342\221\316\221\215\221\345\217\253 */
				return FALSE;
			}
		}
	}
	return TRUE;
}

/* \214\210\222\350 */
void	GunjiShutsujinWindow::OnOk(GunjiShutsujinWindow* pThis)
{
	if ( !pThis->ChkOkButton() ) {		/* \214\210\222\350\203\173\203\136\203\223\202\360\211\237\202\271\202\351\202\251 */
		return;
	}
	pThis->SetGunData();
	pThis->ClrBushouData(HEIKA_HOHEI);	/* \225\220\217\253\203\146\201\133\203\136\217\211\212\372\211\273 */
	pThis->EndModalLoop(IDOK);
}

/* \222\206\216\176 */
void	GunjiShutsujinWindow::OnCancel(GunjiShutsujinWindow* pThis)
{
	pThis->ClrBushouData(HEIKA_HOHEI);
	pThis->EndModalLoop(IDCANCEL);
}

void	GunjiShutsujinWindow::OnDestroy(GunjiShutsujinWindow* pThis)
{
	UserCommandWindow::OnDestroy(pThis);
	CSan6FrameBuffer::GetSan6FB()->RemoveLayoutList(GNO_TMP_TEXTGROUP);
}

/*****************************************************************************/
/******************************* GunjiHenseiWindow ***************************/
/*****************************************************************************/

/* \225\224\221\340\225\322\220\254\203\105\203\102\203\223\203\150\203\105 */

IMPLEMENT_DYNAMIC(GunjiHenseiWindow, UserCommandWindow);

GunjiHenseiWindow::GunjiHenseiWindow(void)
{
#if	defined(_NOEMBEDED_CLASSARRAY)	//\203\122\201\133\203\150\203\105\203\110\203\212\203\101\202\314\203\157\203\117\211\361\224\360
	m_TextSysBtn = &m_TextSysBtn0;
	m_TextGraBtn = &m_TextGraBtn0;
	m_TextCtrl = &m_TextCtrl0;
#endif
	m_pParentWnd = NULL;
	INT		i;
	for ( i = 0 ; i < HEIKA_MAX ; i++ ) {
		m_HeikaHeishiBuf[i] = 0;
		m_strHeikaHeishi[i][0] = '\0';
		m_strHeikaName[i] = (char*)strNull;
	}
	for ( i = 0 ; i < GBUSHOU_MAX ; i++ ) {
		m_BushouHeishiBuf[i] = 0;
		m_strButaiHeishi[i][0] = '\0';
		m_BushouHeikaBuf[i] = HEIKA_HOHEI;
	}
	m_strHeikaHeishiTotal[0] = '\0';
	m_BListRet.RemoveAll();
	ASSERT(sizeof(*this) < 0x8000);
}

GunjiHenseiWindow::~GunjiHenseiWindow()
{
}

#undef	CURRENTCLASS
#define	CURRENTCLASS	GunjiHenseiWindow


const	INT	HENSEI_WIN_WX	= 304;
const	INT	HENSEI_WIN_WY	= 216;
const	INT	HENSEI_WIN_SX	= 12 - 4;
const	INT	HENSEI_WIN_SY	= 12 - 4;
const	INT	HENSEI_WIN_DX	= HENSEI_WIN_SX + HENSEI_WIN_WX;
const	INT	HENSEI_WIN_DY	= HENSEI_WIN_SY + HENSEI_WIN_WY;

BEGIN_MESSAGE_MAP(GunjiHenseiWindow, UserCommandWindow)
	//{{AFX_MSG_MAP(GunjiHenseiWindow)
	ON_COMMAND(ID_HENSEI_OK, OnOk)
	ON_COMMAND(ID_HENSEI_CANCEL, OnCancel)
	ON_COMMAND(ID_HENSEI_BUSHOU, OnSelectBushou)
	ON_COMMAND(ID_HENSEI_HEIKA1, OnHeika1)
	ON_COMMAND(ID_HENSEI_HEIKA2, OnHeika2)
	ON_COMMAND(ID_HENSEI_HEIKA3, OnHeika3)
	ON_COMMAND(ID_HENSEI_HEIKA4, OnHeika4)
	ON_COMMAND(ID_HENSEI_HEIKA5, OnHeika5)
	ON_COMMAND(ID_HENSEI_HEISHI1, OnHeishi1)
	ON_COMMAND(ID_HENSEI_HEISHI2, OnHeishi2)
	ON_COMMAND(ID_HENSEI_HEISHI3, OnHeishi3)
	ON_COMMAND(ID_HENSEI_HEISHI4, OnHeishi4)
	ON_COMMAND(ID_HENSEI_HEISHI5, OnHeishi5)
	ON_WM_DESTROY()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// GunjiHenseiWindow message handlers

CtrlLayout		GunjiHenseiWindow::ctrlLayout[HENSEI_LAYOUT_MAX];
DialogLayout	GunjiHenseiWindow::Layout = {
	WINID_HENSEIWIN, "GunjiHenseiWindow", {HENSEI_WIN_SX, HENSEI_WIN_SY, HENSEI_WIN_DX, HENSEI_WIN_DY},
	WS_POPUP|WS_BORDER, MAINTRANSMODE, DEFAULT_BACK, HENSEI_LAYOUT_MAX, ctrlLayout
};

POINT	GunjiHenseiWindow::m_poBtn[3] = {
	{88, 184},
	{152, 184},
	{8, 32},
};

/* \203\173\203\136\203\223 */
char*	GunjiHenseiWindow::m_strBtn[3] = {
	"\214\210\222\350", "\222\206\216\176", "  \225\220\217\253  ",
};

POINT	GunjiHenseiWindow::m_poText[5] = {
	{8, 8},
	{84, 36},
	{156, 36},
	{232, 16},
	{208, 160},
};

/* \202\163\202\144\202\167\202\163 */
char*	GunjiHenseiWindow::m_strText[5] = {
	"\214\122\222\143\225\322\220\254", "  \225\272\211\310  ", "\225\272\220\224", "\216\143\202\350\225\272\220\224", "\221\215\225\272"
};
/* \225\272\211\310 */
char*	GunjiHenseiWindow::m_strHeika[HEIKA_MAX] = {
	_T(" \225\340\225\272 "),
	_T(" \213\122\225\272 "),
	_T("\216\122\212\170\225\272"),
	_T("\220\205\214\122\225\272"),
	_T("\224\330\221\260\225\272"),
	_T("\223\123\213\122\225\272"),
	_T("\216\122\211\172\225\272"),
};

void GunjiHenseiWindow::MakeSysButtonState64_2(CtrlLayout* pCtrlLayout,
							  UINT unCtrlId,
							  IMAGEID imageId,
							  PSTR pSentence,
							  int x, int y)
{
	CPoint	po = CPoint(x, y);
	SetCtrlLayout(pCtrlLayout, CTRL_SYSBTN72_2, unCtrlId, imageId, po, pSentence);
}

void GunjiHenseiWindow::MakeSysButtonState64_3(CtrlLayout* pCtrlLayout,
							  UINT unCtrlId,
							  IMAGEID imageId,
							  PSTR pSentence,
							  int x, int y)
{
	CPoint	po = CPoint(x, y);
	SetCtrlLayout(pCtrlLayout, CTRL_SYSBTN72_3, unCtrlId, imageId, po, pSentence);
}

/* \203\214\203\103\203\101\203\105\203\147 */
VOID	GunjiHenseiWindow::InitialCtrlLayout(VOID)
{
	// \203\164\203\214\201\133\203\200\203\157\203\142\203\164\203\100\223\157\230\136
static FBLAYOUT_LIST TextLayout = {
	GNO_TMP_TEXTGROUP,
	{ GNO_TMP_TEXT_SX, GNO_TMP_TEXT_SY, GNO_TMP_TEXT_SX + ( ( 64 / 4 ) * GNO_TMP_TEXT_XDIM ), GNO_TMP_TEXT_SY + ( GNO_TMP_TEXT_YDIM * 16 ) },
	TIMFLAG_CLUT | TIMFLAG_4BITS, CLUT_X__STRING, CLUT_Y__STRING,
	GNO_TMP_TEXT_XDIM, GNO_TMP_TEXT_YDIM, NULL
};
	CSan6FrameBuffer::GetSan6FB()->AppendLayoutList(&TextLayout);
	INT	i;
	INT	num = 0;
	INT	IDnum = ID_HENSEI_START;
	INT	IMnum = 0;

	POINT	po;
/* \203\173\203\136\203\223 */
	for ( i = 0 ; i < HENSEI_SYS_BTN_MAX ; i++ ) {
		po = m_poBtn[i];
		MakeSysButtonState1(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), m_strBtn[i], po.x, po.y);
		IMnum++;
	}
	po = m_poBtn[2];
	MakeSysButtonState64_2(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), m_strBtn[2], po.x, po.y);
	IMnum++;
	INT	bkazu = m_BListRet.GetCount();
	ASSERT(bkazu <= GBUSHOU_MAX);
	bkazu = min(bkazu, GBUSHOU_MAX);
	BPtr	pkb;
	for ( i = 0 ; i < GBUSHOU_MAX ; i++ ) {
		if ( i < bkazu ) {
			pkb = m_BListRet.pkbGetBPtr(i);
		}
		else {
			pkb = pkbNull;
		}
		INT		hei = 0;
		HEIKA	heika = (HEIKA)m_HeikaKind[0];
		if ( ACTIVE(pkb) ) {
			hei = pkb->GetHeishi();
			heika = pkb->GetHeika();
		}
		MakeSysButtonState64_3(&ctrlLayout[num++], IDnum++,
				GNO_TMP_TEXT(IMnum), m_strHeika[heika], 80, 56 + (i * 24));
		IMnum++;
		sprintf(m_strButaiHeishi[i], "%3d", hei);
		MakeSysButtonState2(&ctrlLayout[num++], IDnum++,
				GNO_TMP_TEXT(IMnum), m_strButaiHeishi[i], 152, 56 + (i * 24));
		IMnum++;
	}
	ASSERT(HENSEI_BTN_MAX == num);
/* \202\163\202\144\202\167\202\163 */
	IDnum = ID_HENSEI_TEXT_START;
	for ( i = 0 ; i < 5 ; i++ ) {
		po = m_poText[i];
		MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), m_strText[i], po.x, po.y);
		IMnum++;
	}
	for ( i = 0 ; i < HEIKA_MAX ; i++ ) {
		MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), m_strHeika[i], 200, 40 + (i * 16));
		IMnum++;
	}
/* \225\220\217\253 */
	for ( i = 0 ; i < GBUSHOU_MAX ; i++ ) {
		if ( i < bkazu ) {
			pkb = m_BListRet.pkbGetBPtr(i);
		}
		else {
			pkb = pkbNull;
		}
		if ( ACTIVE(pkb) ) {
			MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), (char*)pkb->strName(), 12, 60 + (i * 24));
		}
		else {
			MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), (char*)strNameNull4, 12, 60 + (i * 24));
		}
		IMnum++;
	}
/* \225\272\211\310 */
	INT	total = 0;
	for ( i = 0 ; i < HEIKA_MAX ; i++ ) {
		INT	hei = m_HeikaHeishiBuf[i];
		INT	heika_hei = iGetHeikaHeishi((HEIKA)i);		/* \216\147\227\160\202\263\202\352\202\304\202\242\202\351\225\272\211\310\202\314\225\272\216\155\215\207\214\166 */
		INT	nokori = limsub(hei, heika_hei);
		total = limadd(total, nokori, 21000);
		sprintf(m_strHeikaHeishi[i], ":%4d", nokori);
		MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), m_strHeikaHeishi[i], 248, 40 + (i * 16));
		IMnum++;
	}
/* \221\215\225\272\216\155 */
	sprintf(m_strHeikaHeishiTotal, ":%5d", total);
	MakeTextState(&ctrlLayout[num++], IDnum++,
				GNO_TMP_TEXT(IMnum), m_strHeikaHeishiTotal, 240, 160);
	IMnum++;
/* \223\163\216\163 */
	MakeTextState(&ctrlLayout[num++], IDnum++,
				GNO_TMP_TEXT(IMnum), (char*)m_pktSrc->strName(), 200, 16);
	IMnum++;
	ASSERT(HENSEI_LAYOUT_MAX == num);
}

/* \216\143\202\350\225\272\216\155\225\134\216\246 */
VOID GunjiHenseiWindow::DspNokoriHeishi(VOID)
{
	INT	i;
	INT	total = 0;
	for ( i = 0 ; i < HEIKA_MAX ; i++ ) {
		INT	hei = m_HeikaHeishiBuf[i];
		INT	heika_hei = iGetHeikaHeishi((HEIKA)i);		/* \216\147\227\160\202\263\202\352\202\304\202\242\202\351\225\272\211\310\202\314\225\272\216\155\215\207\214\166 */
		INT	nokori = limsub(hei, heika_hei);
		total = limadd(total, nokori, 21000);
		sprintf(m_strHeikaHeishi[i], ":%4d", nokori);
		m_TextCtrl[HENSEI_TEXT_HEIKA_HEISHI1 + i - HENSEI_TEXT_TITLE].SetText(m_strHeikaHeishi[i]);
	}
/* \221\215\225\272\216\155 */
	sprintf(m_strHeikaHeishiTotal, ":%5d", total);
	m_TextCtrl[HENSEI_TEXT_TOTAL_HEISHI - HENSEI_TEXT_TITLE].SetText(m_strHeikaHeishiTotal);
}

VOID	GunjiHenseiWindow::SetHeika(VOID)
{
	INT		i, hei, cnt;

	cnt = 0;
	for ( i = 0 ; i < HEIKA_MAX ; i++ ) {
		hei = m_pktSrc->iHeishi((HEIKA)i);
		m_HeikaHeishiBuf[i] = hei;
		if ( 0 == hei ) {					/* \225\272\202\252\202\117\202\310\202\314\202\305\203\132\203\142\203\147\202\305\202\253\202\310\202\242 */
			continue;
		}
		m_strHeikaName[cnt] = m_strHeika[i];
		m_HeikaKind[cnt] = i;
		cnt++;
	}
	if ( 0 == cnt ) {						/* \203\107\203\211\201\133\217\210\227\235 */
		ASSERT(FALSE);
		m_strHeikaName[0] = m_strHeika[0];
		m_HeikaKind[0] = 0;
		cnt = 1;
	}
	m_HeikaMax = cnt;
}

BOOL GunjiHenseiWindow::Create(VOID)
{
	CGameDoc* pDoc = ::GetSan6App().GetDocument();
	ASSERT(pDoc != NULL);
	InitialCtrlLayout();
	if ( !CDialog::Create(&Layout, m_pParentWnd, pDoc) ) {
		return FALSE;
	}
	return TRUE;
}

BOOL GunjiHenseiWindow::InitData(TPtr pkt, MainCommand* pMainCmd, CWnd* pParentWnd,
											BList* blist, G_TYPE Guntype, BOOL yasen)
{
	CGameDoc* pDoc = ::GetSan6App().GetDocument();
	ASSERT(pDoc != NULL);
	m_pParentWnd = pParentWnd;
	if ( NOTACTIVE(pkt) ) {
		return FALSE;
	}
	m_pMainCommand = pMainCmd;
	m_pktSrc = pkt;
	m_pkk = pkt->pkkShozoku();
	if ( NOTACTIVE(m_pkk) ) {
		return FALSE;
	}
	SNPtr	pksn = SNData::GetData(0);
	BPtr	pkb = pkt->pkbTaishu();
	m_bYasen = yasen;	/* GTYPE_DEF_MAIN\202\315\226\354\220\355\202\314\217\352\215\207\201\165\214\175\214\202\214\122\201\166\215\125\217\351\220\355\202\314\217\352\215\207\201\165\216\347\217\351\214\122\201\166\202\306\214\304\202\316\202\352\202\351 */
	m_GundanType = Guntype;	/* \215\354\220\254\202\267\202\351\214\122\222\143\202\314\203\136\203\103\203\166 by Yoshigoe */
#ifdef	OLD
	if ( (GTYPE_DEF_MAIN > m_GundanType) ) {	/* \215\125\214\202\221\244 */
		if ( 0 == m_pMainCommand->PickShutsujinBushouSub(m_pktSrc, &m_BList, m_GundanType) ) {
			return FALSE;
		}
	}
	else {
		if ( m_bYasen ) {
			m_BList.PickBushouGeigeki(m_pktSrc);
		}
		else {
			m_pMainCommand->PickShutsujinBushouSub(m_pktSrc, &m_BList, m_GundanType);
		}
		if ( 0 == m_BList.GetCount() ) {
			return FALSE;
		}
	}
#endif
	m_BList = *blist;
	SetHeika();				/* \225\272\211\310\203\132\203\142\203\147 */
	return TRUE;
}

VOID	GunjiHenseiWindow::InitData2(BList* blist, BPtr pkbSanbou)
{
	INT	i;
	for ( i = 0 ; i < GBUSHOU_MAX ; i++ ) {
		m_BushouHeishiBuf[i] = 0;
		m_BushouHeikaBuf[i] = HEIKA_HOHEI;
	}
	m_pkbSanbou = pkbSanbou;
	m_BListRet = *blist;
	m_BListOld = *blist;
	INT	kazu = blist->GetCount();
	ASSERT(kazu <= GBUSHOU_MAX);
	kazu = min(kazu, GBUSHOU_MAX);
	for ( i = 0 ; i < kazu ; i++ ) {
		BPtr	pkb = blist->pkbGetBPtr(i);
		if ( NOTACTIVE(pkb) ) {
			ASSERT(FALSE);
			continue;
		}
		m_BushouHeishiBuf[i] = pkb->GetHeishi();
		m_BushouHeikaBuf[i] = pkb->GetHeika();
	}
}

/* \203\146\201\133\203\136\202\360\226\337\202\267 */
VOID	GunjiHenseiWindow::ClrHensei(VOID)
{
	BList	blist, blistOld;
	blistOld = m_BListRet;
	blist.RemoveAll();
	ShutsujinBushouAto(&blist, &blistOld);	/* \214\273\215\335\202\314\203\146\201\133\203\136\202\360\203\116\203\212\203\101 */

	INT	i;
	INT	kazu = m_BListOld.GetCount();
	ASSERT(kazu <= GBUSHOU_MAX);
	kazu = min(kazu, GBUSHOU_MAX);
	for ( i = 0 ; i < kazu ; i++ ) {		/* \215\305\217\211\202\314\203\146\201\133\203\136\202\311\226\337\202\267 */
		BPtr	pkb = m_BListOld.pkbGetBPtr(i);
		if ( NOTACTIVE(pkb) ) {
			ASSERT(FALSE);
			continue;
		}
		INT		hei = m_BushouHeishiBuf[i];
		HEIKA	heika = m_BushouHeikaBuf[i];
		pkb->SetHeishi(hei);
		pkb->SetHeika(heika);
	}
}

BOOL	GunjiHenseiWindow::OnInitDialog(CVisualObjectList* pVOL)
{
	if ( !CDialog::OnInitDialog(pVOL) ) {
		return FALSE;
	}
#ifdef	OLD
	POINT	poBtnSize[HENSEI_GRA_BTN_MAX] = {
		{72, 16},

		{56, 24},
		{32, 24},
		{56, 24},
		{32, 24},
		{56, 24},
		{32, 24},
		{56, 24},
		{32, 24},
		{56, 24},
		{32, 24},
	};
	const COLORREF col[4] = {
		RGB(0, 0, 128), RGB(30, 30, 240), RGB(100, 100, 184), RGB(50, 50, 104)
	};
	INT	i;
	for ( i = 0 ; i < HENSEI_GRA_BTN_MAX; i++ ) {
		POINT	po = poBtnSize[i];
		m_TextGraBtn[i].SetSize(po.x, po.y);
		m_TextGraBtn[i].SetFrame(TRUE);
		m_TextGraBtn[i].SetGouraud(4, col);
		m_TextGraBtn[i].SetExDIB(po.x, po.y, 1, RGB(0, 0, 0), RGB(255, 255, 255));
	}
#endif
	m_TextCtrl[HENSEI_TEXT_HEIKA].SetPlate(TEXT_PLATE64, FALSE);
	m_TextCtrl[HENSEI_TEXT_HEISHI].SetPlate(TEXT_PLATE32, FALSE);
	m_TextCtrl[HENSEI_TEXT_TOSHI].SetPlate(TEXT_PLATE32, FALSE);
	m_TextCtrl[HENSEI_TEXT_BUSHOU1].SetPlate(TEXT_PLATE64, FALSE);
	m_TextCtrl[HENSEI_TEXT_BUSHOU2].SetPlate(TEXT_PLATE64, FALSE);
	m_TextCtrl[HENSEI_TEXT_BUSHOU3].SetPlate(TEXT_PLATE64, FALSE);
	m_TextCtrl[HENSEI_TEXT_BUSHOU4].SetPlate(TEXT_PLATE64, FALSE);
	m_TextCtrl[HENSEI_TEXT_BUSHOU5].SetPlate(TEXT_PLATE64, FALSE);
	if ( UINT_MAX == m_unCtrlID ) {
		SelectCommand(ID_HENSEI_BUSHOU);
		m_unCtrlID = ID_HENSEI_BUSHOU;
	}
	ReviseFocus();						/* \203\164\203\110\201\133\203\112\203\130\217\103\220\263 */
	EnableOkButton();					/* \202\156\202\152\203\173\203\136\203\223 */
	EnableHeikaHeishiButton();
	return FALSE;
}

/* \202\156\202\152\203\173\203\136\203\223 */
VOID	GunjiHenseiWindow::EnableOkButton(VOID)
{
	HoldDraw();
	if ( ChkOkButton() ) {
		EnableCtrl(ID_HENSEI_OK, TRUE);
	}
	else {
		EnableCtrl(ID_HENSEI_OK, FALSE);
	}
	ReleaseDraw();
}

/* \225\272\211\310\201\101\225\272\216\155\203\173\203\136\203\223 */
VOID	GunjiHenseiWindow::EnableHeikaHeishiButton(VOID)
{
	HoldDraw();
	INT	i;
	for ( i = 0 ; i < GBUSHOU_MAX ; i++ ) {
		EnableCtrl(ID_HENSEI_HEIKA1 + (i * 2), FALSE);
		EnableCtrl(ID_HENSEI_HEISHI1 + (i * 2), FALSE);
	}
	INT	bkazu = m_BListRet.GetCount();
	ASSERT(0 <= bkazu);
	ASSERT(GBUSHOU_MAX >= bkazu);
	bkazu = min(bkazu, GBUSHOU_MAX);
	for ( i = 0 ; i < bkazu ; i++ ) {
		BPtr	pkb = m_BListRet.pkbGetBPtr(i);
		if ( ACTIVE(pkb) ) {
			EnableCtrl(ID_HENSEI_HEIKA1 + (i * 2), TRUE);
			EnableCtrl(ID_HENSEI_HEISHI1 + (i * 2), TRUE);
		}
	}
	ReleaseDraw();
}

CDIB* GunjiHenseiWindow::OnGetDibPtr(UINT unCtrlID)
{
	if ( (ID_HENSEI_START <= unCtrlID) && (unCtrlID < (ID_HENSEI_START + HENSEI_SYS_BTN_MAX)) ) {
		return &m_TextSysBtn[unCtrlID - ID_HENSEI_START];	/* \203\173\203\136\203\223 */
	}
	else if ( ((ID_HENSEI_START + HENSEI_SYS_BTN_MAX) <= unCtrlID) && (unCtrlID < (ID_HENSEI_START + HENSEI_BTN_MAX)) ) {
		return &m_TextGraBtn[unCtrlID - ID_HENSEI_START - HENSEI_SYS_BTN_MAX];	/* \203\173\203\136\203\223 */
	}
	else if ( (ID_HENSEI_TEXT_START <= unCtrlID) && (unCtrlID < (ID_HENSEI_TEXT_START + HENSEI_TEXT_MAX)) ) {
		return &m_TextCtrl[unCtrlID - ID_HENSEI_TEXT_START];/* \202\163\202\144\202\167\202\163 */
	}
	ASSERT(0);
	return NULL;
}

/* \217\343\203\160\203\142\203\150\202\252\211\237\202\263\202\352\202\275 */
void GunjiHenseiWindow::PushPadUp(void)
{
	UINT	uCtrlID = CDialog::GetSelectedCtrlID();	/* \221\111\221\360\202\263\202\352\202\304\202\242\202\351\203\122\203\223\203\147\203\215\201\133\203\213\202\150\202\143\216\346\223\276 */
	UINT	newCtrlID = uCtrlID;

	switch	( uCtrlID ) {
	case ID_HENSEI_BUSHOU:
		newCtrlID = ID_HENSEI_OK;
		break;
	case ID_HENSEI_HEIKA1:
		newCtrlID = ID_HENSEI_BUSHOU;
		break;
	case ID_HENSEI_HEISHI1:
		newCtrlID = ID_HENSEI_CANCEL;
		break;
	case ID_HENSEI_OK:
		newCtrlID = ID_HENSEI_HEIKA5;
		break;
	case ID_HENSEI_CANCEL:
		newCtrlID = ID_HENSEI_HEISHI5;
		break;
	case ID_HENSEI_HEIKA2:
	case ID_HENSEI_HEIKA3:
	case ID_HENSEI_HEIKA4:
	case ID_HENSEI_HEIKA5:
	case ID_HENSEI_HEISHI2:
	case ID_HENSEI_HEISHI3:
	case ID_HENSEI_HEISHI4:
	case ID_HENSEI_HEISHI5:
		newCtrlID = uCtrlID - 2;
		break;
	default:
		CDialog::PushPad(PADKEY_UP);
		return;
	}
	SelectCommand(newCtrlID);
}

/* \211\272\203\160\203\142\203\150\202\252\211\237\202\263\202\352\202\275 */
void GunjiHenseiWindow::PushPadDown(void)
{
	UINT	uCtrlID = CDialog::GetSelectedCtrlID();	/* \221\111\221\360\202\263\202\352\202\304\202\242\202\351\203\122\203\223\203\147\203\215\201\133\203\213\202\150\202\143\216\346\223\276 */
	UINT	newCtrlID = uCtrlID;

	switch	( uCtrlID ) {
	case ID_HENSEI_BUSHOU:
		newCtrlID = ID_HENSEI_HEIKA1;
		break;
	case ID_HENSEI_HEIKA5:
		newCtrlID = ID_HENSEI_OK;
		break;
	case ID_HENSEI_HEISHI5:
		newCtrlID = ID_HENSEI_CANCEL;
		break;
	case ID_HENSEI_OK:
		newCtrlID = ID_HENSEI_BUSHOU;
		break;
	case ID_HENSEI_CANCEL:
		newCtrlID = ID_HENSEI_HEISHI1;
		break;
	case ID_HENSEI_HEIKA1:
	case ID_HENSEI_HEIKA2:
	case ID_HENSEI_HEIKA3:
	case ID_HENSEI_HEIKA4:
	case ID_HENSEI_HEISHI1:
	case ID_HENSEI_HEISHI2:
	case ID_HENSEI_HEISHI3:
	case ID_HENSEI_HEISHI4:
		newCtrlID = uCtrlID + 2;
		break;
	default:
		CDialog::PushPad(PADKEY_DOWN);
		return;
	}
	SelectCommand(newCtrlID);
}

/* \215\266\203\160\203\142\203\150\202\252\211\237\202\263\202\352\202\275 */
void GunjiHenseiWindow::PushPadLeft(void)
{
	UINT	uCtrlID = CDialog::GetSelectedCtrlID();	/* \221\111\221\360\202\263\202\352\202\304\202\242\202\351\203\122\203\223\203\147\203\215\201\133\203\213\202\150\202\143\216\346\223\276 */
	UINT	newCtrlID = uCtrlID;

	switch	( uCtrlID ) {
	case ID_HENSEI_BUSHOU:				/* \225\220\217\253\201\133\201\204\225\272\216\155 */
		newCtrlID = ID_HENSEI_HEISHI1;
		break;
	case ID_HENSEI_HEIKA1:
		newCtrlID = ID_HENSEI_BUSHOU;	/* \225\272\211\310\201\133\201\204\225\220\217\253 */
		break;
	case ID_HENSEI_HEIKA2:
	case ID_HENSEI_HEIKA3:
	case ID_HENSEI_HEIKA4:
	case ID_HENSEI_HEIKA5:
		newCtrlID = uCtrlID + 1;		/* \225\272\211\310\201\133\201\204\225\272\216\155 */
		break;
	case ID_HENSEI_HEISHI1:
	case ID_HENSEI_HEISHI2:
	case ID_HENSEI_HEISHI3:
	case ID_HENSEI_HEISHI4:
	case ID_HENSEI_HEISHI5:
		newCtrlID = uCtrlID - 1;		/* \225\272\216\155\201\133\201\204\225\272\211\310 */
		break;
	case ID_HENSEI_OK:					/* \214\210\222\350 */
		newCtrlID = ID_HENSEI_CANCEL;
		break;
	case ID_HENSEI_CANCEL:				/* \222\206\216\176 */
		newCtrlID = ID_HENSEI_OK;
		break;
	default:
		CDialog::PushPad(PADKEY_LEFT);
		return;
	}
	SelectCommand(newCtrlID);
}

/* \211\105\203\160\203\142\203\150\202\252\211\237\202\263\202\352\202\275 */
void GunjiHenseiWindow::PushPadRight(void)
{
	UINT	uCtrlID = CDialog::GetSelectedCtrlID();	/* \221\111\221\360\202\263\202\352\202\304\202\242\202\351\203\122\203\223\203\147\203\215\201\133\203\213\202\150\202\143\216\346\223\276 */
	UINT	newCtrlID = uCtrlID;

	switch	( uCtrlID ) {
	case ID_HENSEI_BUSHOU:				/* \225\220\217\253\201\133\201\204\225\272\211\310 */
		newCtrlID = ID_HENSEI_HEIKA1;
		break;
	case ID_HENSEI_HEIKA1:
	case ID_HENSEI_HEIKA2:
	case ID_HENSEI_HEIKA3:
	case ID_HENSEI_HEIKA4:
	case ID_HENSEI_HEIKA5:
		newCtrlID = uCtrlID + 1;		/* \225\272\211\310\201\133\201\204\225\272\216\155 */
		break;
	case ID_HENSEI_HEISHI1:
		newCtrlID = ID_HENSEI_BUSHOU;	/* \225\272\216\155\201\133\201\204\225\220\217\253 */
		break;
	case ID_HENSEI_HEISHI2:
	case ID_HENSEI_HEISHI3:
	case ID_HENSEI_HEISHI4:
	case ID_HENSEI_HEISHI5:
		newCtrlID = uCtrlID - 1;		/* \225\272\216\155\201\133\201\204\225\272\211\310 */
		break;
	case ID_HENSEI_OK:					/* \214\210\222\350 */
		newCtrlID = ID_HENSEI_CANCEL;
		break;
	case ID_HENSEI_CANCEL:				/* \222\206\216\176 */
		newCtrlID = ID_HENSEI_OK;
		break;
	default:
		CDialog::PushPad(PADKEY_RIGHT);
		return;
	}
	SelectCommand(newCtrlID);
}

/* \203\160\203\142\203\150\202\252\211\237\202\263\202\352\202\275 */
void GunjiHenseiWindow::PushPad(int nPadID)
{
	switch ( nPadID ) {
	case PADKEY_UP :
		PushPadUp();
		return;
	case PADKEY_DOWN :
		PushPadDown();
		return;
	case PADKEY_LEFT :
		PushPadLeft();
		return;
	case PADKEY_RIGHT :
		PushPadRight();
		return;
	case PADKEY_START :
		if ( !ChkOkButton() ) {
			return;
		}
		SelectAndPush(ID_HENSEI_OK);
		return;
	default :
		break;
	}
	CDialog::PushPad(nPadID);
}

/* \203\160\203\142\203\150\202\252\227\243\202\263\202\352\202\275 */
void GunjiHenseiWindow::ReleasePad(int nPadID)
{
	switch ( nPadID ) {
	case PADKEY_START :
		if ( !ChkOkButton() ) {
			return;
		}
		nPadID = PADKEY_CIRCLE;	// \213\255\210\370\202\311\201\233\203\173\203\136\203\223\202\252\227\243\202\263\202\352\202\275\202\261\202\306\202\311\202\267\202\351
		break;
	case PADKEY_X:
		OnCancel(this);
		return;
	default :
		break;
	}
	CDialog::ReleasePad(nPadID);
}

/* \202\156\202\152\203\173\203\136\203\223\202\252\211\237\202\271\202\351\202\251 */
BOOL	GunjiHenseiWindow::ChkOkButton(VOID)
{
	BPtr	pkb;
	INT		i, cnt;

	cnt = m_BListRet.GetCount();
	if ( 0 >= cnt ) {
		return FALSE;
	}
	ASSERT(cnt <= GBUSHOU_MAX);
	cnt = min(cnt, GBUSHOU_MAX);
	for ( i = 0 ; i < cnt ; i++ ) {
		pkb = m_BListRet.pkbGetBPtr(i);
		if ( NOTACTIVE(pkb) ) {			/* \225\220\217\253\202\252\223\374\227\315\202\263\202\352\202\304\202\242\202\310\202\242 */
			return FALSE;
		}
		if ( HEIKA_NONE == pkb->GetHeika() ) {
			return FALSE;
		}
		if ( 0 >= pkb->GetHeishi() ) {
			return FALSE;
		}
	}
	return TRUE;
}

/* \214\210\222\350 */
void	GunjiHenseiWindow::OnOk(GunjiHenseiWindow* pThis)
{
	if ( !pThis->ChkOkButton() ) {	/* \214\210\222\350\203\173\203\136\203\223\202\360\211\237\202\271\202\351\202\251 */
		return;
	}
	pThis->EndModalLoop(IDOK);
}

/* \222\206\216\176 */
void	GunjiHenseiWindow::OnCancel(GunjiHenseiWindow* pThis)
{
	pThis->ClrHensei();				/* \203\146\201\133\203\136\226\337\202\265 */
	pThis->EndModalLoop(IDCANCEL);
}

void GunjiHenseiWindow::OnDestroy(GunjiHenseiWindow* pThis)
{
	UserCommandWindow::OnDestroy(pThis);
	CSan6FrameBuffer::GetSan6FB()->RemoveLayoutList(GNO_TMP_TEXTGROUP);
}

/*****************************************************************************/

VOID	GunjiHenseiWindow::ShutsujinBushouAto(BList* blist, BList* blistOld)
{
	INT	i;
	INT	kazu = blist->GetCount();
	BPtr	pkb;

	m_BListRet = *blist;
	INT	bkazuOld = blistOld->GetCount();
	if ( 0 == bkazuOld ) {
		return;
	}
/* \221\117\202\314\217\157\220\167\225\220\217\253 */
	HEIKA	heika = (HEIKA)m_HeikaKind[0];
	for ( i = 0 ; i < bkazuOld ; i++ ) {
		pkb = blistOld->pkbGetBPtr(i);
		if ( NULL == blist->Find(pkb) ) {	/* \220\126\202\265\202\242\203\201\203\223\203\157\201\133\202\311\202\242\202\310\202\242 */
			pkb->SetHeishi(0);
			pkb->SetHeika(heika);
		}
	}
}

/* \221\111\221\360\211\302\224\134\225\220\217\253\202\360\217\127\202\337\202\351 \216\121\226\144\201\106sanbouf = GSEL_SANBOU , \225\220\217\253:sanbouf = GSEL_BUSHOU*/
INT		GunjiHenseiWindow::PickShutsujinBushou(BList* blist)
{
	BPtr	pkb;
	BList	blistSrc;
	INT		bkazu, i;

	blist->RemoveAll();
	blistSrc = m_BList;
	bkazu = blistSrc.GetCount();
	for ( i = 0 ; i < bkazu ; i++ ) {
		pkb = blistSrc.pkbGetBPtr(i);
		if ( NOTACTIVE(pkb) ) {
			continue;
		}
		if ( m_pkbSanbou == pkb ) {
			continue;
		}
		if ( ChkUseKiryoku(m_GundanType) ) {
			if ( pkb->iKiryoku() < KIRYOKU_GUNJI_SHUTSUJIN ) {
				continue;
			}
		}
		if ( ChkUseCommandFlag(m_GundanType) ) {
			if ( pkb->isCommandEnd() ) {
				continue;
			}
		}
		if ( !ChkGunyuuShutsujin(m_GundanType) ) {
			if ( pkb->isKunshu() ) {
				continue;
			}
		}

		blist->AddTail(pkb);				/* \203\212\203\130\203\147\202\311\222\307\211\301 */
	}
	return blist->GetCount();
}

/* \225\220\217\253\221\111\221\360 */
VOID	GunjiHenseiWindow::SelectShutsujinBushou(VOID)
{
	BList	blist, blistRet, blistOld;
	INT		kazu;

	if ( NOTACTIVE(m_pktSrc) ) {
		return;
	}
	if ( 0 == PickShutsujinBushou(&blist) ) {
		return;
	}
	blistOld = m_BListRet;					/* \214\273\215\335\202\314\225\220\217\253 */
	blistRet.RemoveAll();
	INT	bkazu = min(blist.GetCount(), GBUSHOU_MAX);
	kazu = SelectBushou(blist, blistRet, bkazu, _shutsujin_b_param, strNull, &blistOld);
	if ( -1 == kazu ) {
		return;
	}
	ShutsujinBushouAto(&blistRet, &blistOld);
}

/* \225\220\217\253\221\111\221\360 */
void	GunjiHenseiWindow::OnSelectBushou(GunjiHenseiWindow* pThis)
{
	pThis->m_unCtrlID = ID_HENSEI_BUSHOU;
	pThis->EndModalLoop(ID_HENSEI_BUSHOU);
}


VOID	GunjiHenseiWindow::SetButaiHeika(INT no, HEIKA iHeika)
{
	if ( (no < 0) || (GBUSHOU_MAX <= no) ) {
		ASSERT(FALSE);
		return;
	}
	if ( (iHeika < HEIKA_HOHEI) || (HEIKA_MAX <= iHeika) ) {
		ASSERT(FALSE);
		return;
	}
	INT	bkazu = m_BListRet.GetCount();
	if ( bkazu <= no ) {
		return;
	}
	BPtr	pkb = m_BListRet.pkbGetBPtr(no);
	if ( NOTACTIVE(pkb) ) {
		ASSERT(FALSE);
		return;
	}
	HoldDraw();
	INT	hei_old = pkb->GetHeishi();
/* \225\272\211\310\225\317\215\130 */
	pkb->SetHeika(iHeika);
	m_TextGraBtn[HENSEI_GRA_BTN_HEIKA1 + (no * 2)].SetText(m_strHeika[iHeika]);

	pkb->SetHeishi(0);
	INT	hei_max = iGetHeikaHeishiMax(iHeika);	/* \223\163\216\163\202\314\225\272\211\310\225\272\216\155 */
	INT	hei_use = iGetHeikaHeishi(iHeika);	/* \216\147\227\160\202\263\202\352\202\304\202\242\202\351\225\272\211\310\202\314\225\272\216\155\215\207\214\166 */
	INT	hei = limsub(hei_max, hei_use);		/* \216\147\227\160\211\302\224\134\202\310\216\143\202\350\225\272\216\155 */
	hei = min(hei, hei_old);				/* \216\143\202\350\225\272\216\155\202\306\210\310\221\117\202\314\225\272\216\155\202\360\224\344\212\162 */
	pkb->SetHeishi(hei);
/* \225\272\216\155\220\224\225\317\215\130 */
	sprintf(m_strButaiHeishi[no], "%3d", hei);
	m_TextGraBtn[HENSEI_GRA_BTN_HEISHI1 + (no * 2)].SetText(m_strButaiHeishi[no]);
	DspNokoriHeishi();						/* \216\143\202\350\225\272\216\155\225\134\216\246 */
	ReleaseDraw();
}

/* \225\272\211\310\223\374\227\315 */
VOID	GunjiHenseiWindow::InpHeika(INT no)
{
	INT	bkazu = m_BListRet.GetCount();
	if ( bkazu <= no ) {
		return;
	}
	BPtr	pkb = m_BListRet.pkbGetBPtr(no);
	if ( NOTACTIVE(pkb) ) {
		ASSERT(FALSE);
		return;
	}
//	INT	ret = inpSubCmd("\225\272\211\310\221\111\221\360", m_strHeikaName, m_HeikaMax, 0xffff, TRUE, this);
	INT	ret = inpSubCmd2("\225\272\211\310\221\111\221\360", m_strHeikaName, m_HeikaMax, 0xffff, TRUE, SCMDBTN_YELLOW, this);
	if ( -1 == ret ) {
		return;
	}
	HEIKA	heika = (HEIKA)m_HeikaKind[ret];
	SetButaiHeika(no, heika);
	EnableOkButton();					/* \202\156\202\152\203\173\203\136\203\223 */
}

void	GunjiHenseiWindow::OnHeika1(GunjiHenseiWindow* pThis)
{
	pThis->m_unCtrlID = ID_HENSEI_HEIKA1;
	pThis->InpHeika(0);
}

void	GunjiHenseiWindow::OnHeika2(GunjiHenseiWindow* pThis)
{
	pThis->m_unCtrlID = ID_HENSEI_HEIKA2;
	pThis->InpHeika(1);
}

void	GunjiHenseiWindow::OnHeika3(GunjiHenseiWindow* pThis)
{
	pThis->m_unCtrlID = ID_HENSEI_HEIKA3;
	pThis->InpHeika(2);
}

void	GunjiHenseiWindow::OnHeika4(GunjiHenseiWindow* pThis)
{
	pThis->m_unCtrlID = ID_HENSEI_HEIKA4;
	pThis->InpHeika(3);
}

void	GunjiHenseiWindow::OnHeika5(GunjiHenseiWindow* pThis)
{
	pThis->m_unCtrlID = ID_HENSEI_HEIKA5;
	pThis->InpHeika(4);
}

/* \225\272\211\310\202\314\225\272\216\155\202\154\202\140\202\167 */
INT		GunjiHenseiWindow::iGetHeikaHeishiMax(INT type)
{
	if ( (HEIKA_MAX + 1) <= type ) {
		ASSERT(FALSE);
		return 0;
	}
	return m_HeikaHeishiBuf[type];
}

/* \216\147\227\160\202\263\202\352\202\304\202\242\202\351\225\272\211\310\202\314\225\272\216\155 */
INT		GunjiHenseiWindow::iGetHeikaHeishi(INT type)
{
	INT		i, hei, total, heika;
	BPtr	pkb;

	total = 0;
	INT	bkazu = m_BListRet.GetCount();
	for ( i = 0 ; i < bkazu ; i++ ) {
		pkb = m_BListRet.pkbGetBPtr(i);
		if ( NOTACTIVE(pkb) ) {
			continue;
		}
		heika = pkb->GetHeika();
		if ( heika != type ) {			/* \225\272\211\310\202\252\210\341\202\244 */
			continue;
		}
		hei = pkb->GetHeishi();
		total = limadd(total, hei, B_HEISHI_MAX * GBUSHOU_MAX);
	}
	return total;
}

/* \225\272\216\155\223\374\227\315 */
VOID	GunjiHenseiWindow::InpHeishi(INT no)
{
	if ( (no < 0) || (GBUSHOU_MAX <= no) ) {
		ASSERT(FALSE);
		return;
	}
	INT	bkazu = m_BListRet.GetCount();
	if ( bkazu <= no ) {
		return;
	}
	BPtr	pkb = m_BListRet.pkbGetBPtr(no);
	if ( NOTACTIVE(pkb) ) {
		ASSERT(FALSE);
		return;
	}
	INT heika = pkb->GetHeika();
	if ( (heika < HEIKA_HOHEI) || (HEIKA_MAX <= heika) ) {
		return;
	}
	INT	hei_max = iGetHeikaHeishiMax(heika);/* \214\263\201\130\202\314\225\272\211\310\225\272\216\155\215\305\221\345\222\154 */
	INT	hei_use = iGetHeikaHeishi(heika);	/* \216\147\227\160\202\263\202\352\202\304\202\351\225\272\211\310\225\272\216\155 */
	INT	hei_old = pkb->GetHeishi();
	hei_use = limsub(hei_use, hei_old);		/* \216\251\225\252\202\314\225\252\202\360\210\370\202\255 */
	INT	range = min(limsub(hei_max, hei_use), B_HEISHI_MAX);
	range = min(range, pkb->iHeishiMax());
	if ( 0 >= range ) {						/* \223\374\227\315\225\163\211\302 */
		return;
	}
	INT	ret = InputCalc(0, range, hei_old, this);
	SetFocus();
	if ( -1 == ret ) {
		return;
	}
	HoldDraw();
	pkb->SetHeishi(ret);
	sprintf(m_strButaiHeishi[no], "%3d", ret);
	m_TextGraBtn[HENSEI_GRA_BTN_HEISHI1 + (no * 2)].SetText(m_strButaiHeishi[no]);
	DspNokoriHeishi();
	ReleaseDraw();
	EnableOkButton();					/* \202\156\202\152\203\173\203\136\203\223 */
}

void	GunjiHenseiWindow::OnHeishi1(GunjiHenseiWindow* pThis)
{
	pThis->m_unCtrlID = ID_HENSEI_HEISHI1;
	pThis->InpHeishi(0);
}

void	GunjiHenseiWindow::OnHeishi2(GunjiHenseiWindow* pThis)
{
	pThis->m_unCtrlID = ID_HENSEI_HEISHI2;
	pThis->InpHeishi(1);
}

void	GunjiHenseiWindow::OnHeishi3(GunjiHenseiWindow* pThis)
{
	pThis->m_unCtrlID = ID_HENSEI_HEISHI3;
	pThis->InpHeishi(2);
}

void	GunjiHenseiWindow::OnHeishi4(GunjiHenseiWindow* pThis)
{
	pThis->m_unCtrlID = ID_HENSEI_HEISHI4;
	pThis->InpHeishi(3);
}

void	GunjiHenseiWindow::OnHeishi5(GunjiHenseiWindow* pThis)
{
	pThis->m_unCtrlID = ID_HENSEI_HEISHI5;
	pThis->InpHeishi(4);
}

/******************************* gshuwin.cpp *********************************/